using System;
using System.Windows.Forms;
using App.Git.Vista.Widgets;
using App.Modelo.Attributes;
using App.Modelo.Menu;
using App.Persistencia;
using App.Seguridad.Vista.Menu;
using App.SolInf.Controlador;
using App.SolInf.Modelo;
using App.SolInf.Reportes;
using App.SolInf.Vista.Controls;
using NHibernate;

namespace App.SolInf.Vista.Listado
{
    [Formulario("Presupuestos")]
    public class ListadoPresupuestos : ListadoBusquedaGenerico
    {
        public FiltroBusquedaPresupuesto ControlBusqueda;

        private ControladoraPresupuestos _controladoraPresupuestos;
        public ControladoraPresupuestos ControladoraPresupuestos
        {
            get
            {
                return _controladoraPresupuestos ??
                       (_controladoraPresupuestos =
                        ModuloSolInf.Instance.FabricaControladoras.Factory<ControladoraPresupuestos>());
            }
            set { _controladoraPresupuestos = value; }
        }


        public ListadoPresupuestos()
        {
            ContenedorModulo = ModuloSolInf.Instance;
            BotonCancelar = BotonSeleccionar = false;

            FormatoColumna(AddColumn("Presupuesto", "Id"), ListadoFormatoCell.Numeracion);
            FormatoColumna(AddColumn("Fecha", "FechaAlta"), ListadoFormatoCell.FechaCorta);
            AddColumn("Cliente", "Cliente");
            AddColumn("Estado");
            AddColumn("Vendedor");
            AddColumn("Condicion", "FormaPago");
            GridView.Columns.Add(new DataGridViewCheckBoxColumn
                                     {
                                         ThreeState = false,
                                         HeaderText = "Vigente",
                                         DataPropertyName = "EstaVigente",
                                         AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet
                                     });

            FormatoColumna(AddColumn("Total", "Total"), ListadoFormatoCell.Moneda);

            EstablecerAnchos(80, 80, 200, 70, 70, 70, 50, 70);


            ControlBusqueda = new FiltroBusquedaPresupuesto();

            SearchControls.Add(ControlBusqueda);
            var controladorBoton = new MenuControladoraBotonera
                                       {
                                           Controls = ControlesGestion,
                                           Model = new MenuContenedor(new MenuBaseItem[]
                                                                          {
                                                                              new MenuBoton("Nuevo", "add",
                                                                                            "Presupuestos/alta"),
                                                                              new MenuBoton("Ver", "view",
                                                                                            "Presupuestos/ver"),
                                                                              new MenuBoton("Modificar", "edit",
                                                                                            "Presupuestos/modificar"),
                                                                              new MenuBoton("Eliminar", "delete",
                                                                                            "Presupuestos/baja"),
                                                                              new MenuBoton("Informe", "printer",
                                                                                            "Presupuestos/informe")
                                                                          })
                                       };

            controladorBoton.ExecuteCommand +=
                new EventHandler<MenuEjecutarComandoEventArgs>(controladorBoton_ExecuteCommand);
        }


        private void controladorBoton_ExecuteCommand(object sender, MenuEjecutarComandoEventArgs e)
        {
            var item = GetSelectedItem<Presupuesto>();

            if (e.Item.Command == "Presupuestos/alta")
            {
                new Comandos.ComandoAltaPresupuesto().Ejecutar();
            }
            else if (e.Item.Command == "Presupuestos/ver" && _seleccionar())
            {
                var form = new DetallePresupuesto()
                               {
                                   Presupuesto = item,
                                   ControladoraPresupuestos = ControladoraPresupuestos
                               };
                form.Ver();
            }
            else if (e.Item.Command == "Presupuestos/modificar" && _seleccionar())
            {
                var form = new DetallePresupuesto()
                               {
                                   Presupuesto = item,
                                   ControladoraPresupuestos = ControladoraPresupuestos
                               };
                form.Modificar();
            }
            else if (e.Item.Command == "Presupuestos/baja" && _confirmar())
            {
                try
                {
                    ControladoraPresupuestos.Baja(item);
                    MessageBox.Show("Se elimino la compra", Text);
                    OnSearch();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else if (e.Item.Command == "Presupuestos/informe" && _seleccionar())
            {
                new PresupuestoReporte().Ver(item.Id);
            }
        }


        protected override void OnSearch()
        {
            DataSource = ControlBusqueda.AplicarFiltro(ControladoraPresupuestos.Consultar())
                .List<Presupuesto>();
        }

        [Comando("modificar", "Modifica un cliente existente en la base de datos")]
        public void Modificar()
        {
            Text = "Modificar Presupuestos";
            ContenedorModulo.AbrirFormulario(this);
        }

        [Comando("ver")]
        public void ver()
        {
            Text = "Ver Presupuestos";
            ContenedorModulo.AbrirFormulario(this);
        }

        [Comando("baja")]
        public void Baja()
        {
            Text = "Baja de presupuestos";
            ContenedorModulo.AbrirFormulario(this);
        }
    }
}